<?php
/**
 * 
 * 店铺共用控制器
 * 
 * @author ezhu <ezhu@jipukeji.com>
 *
 */

namespace Shop\Controller;
use Common\Controller\BaseController;


class CommonController extends BaseController {


    protected $seller     = null;  //卖家模块
    protected $seller_id  = null;  //卖家id
    protected $sellerInfo = null;  //卖家信息
    protected $store_id   = null;  //店铺id
    
    /**
     * 导航菜单
     */
    protected $menu = null;
    
    /**
     * 是否进行登录检查
     * @var boolean
     */
    protected $checkLogin  = true;
    
    /**
     * 页面标题
     * @var array
     */
    protected $meta = array(
            'UserGroup'     => '会员等级',
            'DeliveryTpl'   => '运费模板',
            'Ship'          => '发货单',
            'Area'          => '配送区域',
            'ItemComment'   => '商品评价',
            'Item'          => '商品',
            'Withdraw'      => '提现',
            'Shop'          => '店铺',
            'Supplier'      => '供应商',
            'Union'         => '推广联盟',
            'Manjian'       => '满减',
            'SecondPieces'  => '第二件折扣',
            'BuySend'       => '买送',
            'Join'          => '拼团',
            'Seckill'       => '秒杀',
            'Message'       => '站内消息'
    );

    /**
     * 构造方法
     */
    protected function _initialize(){
        // 读取站点配置
        $config = api('Config/lists');
        // 添加配置
        C($config);
        $this->seller   = A('seller','Event');
        $this->sellerInfo = $this->seller->getSellerInfo('',2);
        if ( !is_array($this->sellerInfo)) {
            $this->error($this->sellerInfo,U('Home/User/login'));
        }
        $this->seller_id = $this->sellerInfo['seller_id'];
        $this->store_id = $this->sellerInfo['store_id'];
        if($this->checkLogin) {
            if(empty($this->seller_id) || empty($this->store_id)){
                session('seller_user',null); // 清空session
                //$this->redirect('Seller/login');
                $this->redirect('User/login');
            }
        }
        $this->menu = A('Menu','Event')->menuList();
        parent::_initialize();
		if(CONTROLLER_NAME == 'Index'){
            $this->redirect('Store/index');
        }
		$this->assign('menu',$this->menu);
        $this->assign('sellerInfo',$this->sellerInfo);
        $this->assign('store_id', $this->store_id);
        $this->assign('last_login_time',$_SESSION['jipushop_store']['seller_user']['old_last_login_time']);
        $this->assign('current',CONTROLLER_NAME.'_'.ACTION_NAME);

    }
    
    
    /**
     * 访问不存在的页面
     * @return void
     */
    protected function _empty($method, $args = null){
        if(file_exists_case($this->view->parseTemplate())){
            // 检查是否存在默认模版 如果有直接输出模版
            $this->display();
        }else{
            $this->throw404();
        }
    }


    /**
     * 抛出一个404页面
     */
    protected function throw404(){
        send_http_status(404);
        $this->error('没有这个页面');
    }
    
    
    /**
     * 单表查询通用列表
     * @param  array $where 查询条件
     * @return array 内容列表
     * @author Justin <justin@jipu.com>
     */
    function index($where = null,$order =''){
        !$where && $where['status'] = array('egt', 0);
        $lists = $this->lists(CONTROLLER_NAME, $where,$order);
        //记录当前列表页的Cookie
        Cookie('__forward__', $_SERVER['REQUEST_URI']);
        int_to_string($lists, array('status' => array('0' => '<span class="text-cancel">已禁用</span>', '1' => '<span class="text-success">正常</span>')));
        //display前置操作
        method_exists($this, '_before_index_display') && $this->_before_index_display($lists);
        $this->lists = $lists;
        $this->meta_title = $this->meta[CONTROLLER_NAME].'列表';
        $this->display();
    }
    
    
    /**
     * 单表查询通用添加方法
     * @author Justin <justin@jipu.com>
     * @version 2015070111
     */
    function add(){
        $act_id = I('act_id');
        $list = M('SeckillActivity')->where(array('id'=>$act_id))->find();
        $this->meta_title = '新增'.$this->meta[CONTROLLER_NAME];
        $this->assign('act_id',$act_id);
        $this->assign('list',$list);
        file_exists(T()) ? $this->display() : $this->display('edit');

    }
    
    /**
     * 单表查询通用编辑方法
     * @param string $model 模型名字
     * @author Justin <justin@jipu.com>
     */
    function edit($model = CONTROLLER_NAME){
        $id = I('request.id');
        $act_id = I('act_id');
        $list = M('SeckillActivity')->where(array('id'=>$act_id))->find();
        if(empty($id)){
            $this->error('参数不能为空！');
        }
        $this->assign('act_id',$act_id);
        $this->assign('list',$list);
        $this->data = D($model)->detail($id);
        $this->meta_title = '编辑'.$this->meta[CONTROLLER_NAME];
        //display前置操作
        method_exists($this, '_before_edit_display') && $this->_before_edit_display();
        $this->display();
    }

    function addslide(){
        $type = I('type');
        $this->meta_title = '新增'.$this->meta[CONTROLLER_NAME];
        $this->assign('type',$type);
        file_exists(T()) ? $this->display() : $this->display('editSlide');
    }

    /**
     * 单表查询通用更新方法
     * @param string $model 模型名字
     * @author Justin <justin@jipu.com>
     */
    function update($model = CONTROLLER_NAME){
        if(IS_POST){
            $model = D($model);
            if(false !== $model->update()){
                if($_REQUEST["h"]=="1"){
                    $result=array();
                    $result["code"]=1;
                    $result["message"]="OK!";
                    echo json_encode($result);
                    exit;
                }
                if(strtoupper(substr($model->getLastSql(),0,6))=="INSERT"){
                    $data=$model->data();
                    $result=$model->query("select id from jipu.jipu_item where name='{$data['name']}' and sitehomeurl='{$data['sitehomeurl']}' order by id desc");
                    $this->success('操作成功！', 'edit/id/'.$result[0]['id'].".html");//
                }else{
                    $this->success('操作成功！', '#');//
                }

            }else{
                $error = $model->getError();
                $this->error(empty($error) ? '未知错误！' : $error);
            }
        }else{
            $this->redirect('index');
        }
    }

    /**
     * 更新部分数据
     * @author Max.Yu <max@jipu.com>
     */
    public function updateField($model = CONTROLLER_NAME){
        $res = D($model)->updateField();
        if(!$res){
            $this->error($model->getError());
        }else{
            $this->success('更新成功', Cookie('__forward__'));
        }
    }
    
    /**
     * 条目假删除
     * @param string $model 模型名称,供D函数使用的参数
     * @param array  $where 查询时的where()方法的参数
     * @param array  $msg   执行正确和错误的消息 array('success'=>'','error'=>'', 'url'=>'','ajax'=>false)
     *                     url为跳转页面,ajax是否ajax方式(数字则为倒数计时秒数)
     *
     */
    protected function delete ($model , $where = array() , $msg = array( 'success'=>'删除成功！', 'error'=>'删除失败！')) {
        $data['status'] = -1;
        $this->editRow($model, $data, $where, $msg);
    }
    
    
    /**
     * 禁用条目
     * @param string $model 模型名称,供D函数使用的参数
     * @param array  $where 查询时的 where()方法的参数
     * @param array  $msg   执行正确和错误的消息,可以设置四个元素 array('success'=>'','error'=>'', 'url'=>'','ajax'=>false)
     *                     url为跳转页面,ajax是否ajax方式(数字则为倒数计时秒数)
     *
     */
    protected function forbid ( $model , $where = array() , $msg = array( 'success'=>'状态禁用成功！', 'error'=>'状态禁用失败！')){
        $data    =  array('status' => 0);
        $this->editRow( $model , $data, $where, $msg);
    }
    
    
    /**
     * 恢复条目
     * @param string $model 模型名称,供D函数使用的参数
     * @param array  $where 查询时的where()方法的参数
     * @param array  $msg   执行正确和错误的消息 array('success'=>'','error'=>'', 'url'=>'','ajax'=>false)
     *                     url为跳转页面,ajax是否ajax方式(数字则为倒数计时秒数)
     *
     */
    protected function resume (  $model , $where = array() , $msg = array( 'success'=>'状态恢复成功！', 'error'=>'状态恢复失败！')){
        $data    =  array('status' => 1);
        $this->editRow(   $model , $data, $where, $msg);
    }
    
    
    /**
     * 对数据表中的单行或多行记录执行修改 GET参数id为数字或逗号分隔的数字
     *
     * @param string $model 模型名称,供M函数使用的参数
     * @param array  $data  修改的数据
     * @param array  $where 查询时的where()方法的参数
     * @param array  $msg   执行正确和错误的消息 array('success'=>'','error'=>'', 'url'=>'','ajax'=>false)
     *                     url为跳转页面,ajax是否ajax方式(数字则为倒数计时秒数)
     *
     * @author 朱亚杰  <zhuyajie@topthink.net>
     */
    final protected function editRow ( $model ,$data, $where , $msg){
        $id    = array_unique((array)I('id',0));
        $id    = is_array($id) ? implode(',',$id) : $id;
        //如存在id字段，则加入该条件
        $fields = M($model)->getDbFields();
        if(in_array('id',$fields) && !empty($id)){
            $where = array_merge( array('id' => array('in', $id )) ,(array)$where );
        }
    
        $msg   = array_merge( array( 'success'=>'操作成功！', 'error'=>'操作失败！', 'url'=>'' ,'ajax'=>IS_AJAX) , (array)$msg );
        if(M($model)->where($where)->save($data)!==false){
            //记录行为
            action_log('update_'.$model, $model, $id, UID);
            //  清理后台缓存 R('Index/getcleancache');
            $this->success($msg['success'],$msg['url'],$msg['ajax']);
        }else{
            $this->error($msg['error'],$msg['url'],$msg['ajax']);
        }
    }
    
    
    /**
     * 设置单个字段值
     * @param string $model 控制器名称|数据表名称
     * @return json 数据更新结果
     * @author Max.Yu <max@jipu.com>
     */
    public function setFieldValue($model = CONTROLLER_NAME){
        $id = I('post.id', '');
        $field = I('post.field', '');
        $value = I('post.value', '');
        switch ($field) {
            case 'price':
                if($value < 0)$this->error('价格不能设置为负数');
                $res = D('Item')->checkItemPrice($id,$value);
                if($res == false)$this->error('设置的商品价格不能小于商品返现价格');
                break;
            case 'stock':
                if($value < 0 )$this->error('库存不能设置为负数');
                break;
            case 'sdp':
                //查询返现金额
                $min_price = D('Home/ItemSpecifiction')->getMinPrice($id);
                if($min_price){
                    if($value > $min_price)$this->error('返现金额不能大于商品设置的最小金额');
                }
                break;
            default:
                
                break;
        }
        if(empty($id) || empty($field)){
            $this->error('参数不完整！');
        }
        if(!check_form_hash()){
            $this->error('非法数据提交！');
        }
        //添加判断是否参加老客户立减活动 Buddha 20170614
        $fugouCount = M('Fugou')->where( array('item_id'=>$id,'status'=>1))->count();
        if ( ($fugouCount > 0) && $field == 'price') {
            $this->error('此商品正参加老客户立减活动，不允许修改价格！');
        }
        //添加判断是否存在规格及其属性 buddha 20170322
        $_count = M('item_specifiction')->where(array('item_id'=>$id))->count();
        if ($_count > 0) {
            $this->error('此商品存在多种规格，请在编辑页面修改');
        }
        $res = M($model)->where(array('id'=>$id))->setField($field, $value);
        if($res){
            $this->success('更新成功！');
        }else{
            $this->error('更新失败！');
        }
    }


    /**
     * 设置一条或者多条数据的状态
     */
    public function setStatus($Model=CONTROLLER_NAME){

        $ids = I('request.ids');
        $status = I('request.status');
        if(empty($ids)){
            $this->error('请选择要操作的数据');
        }

        $map['id'] = array('in',$ids);
        switch ($status){
            case -1 :
                if($Model == 'Union'){
                    $sid = M('Union')->where('id ='.$ids)->getField('uid');
                    M('Distribution')->where('user_id='.$sid)->delete();
                    M('Union')->where('id ='.$ids)->delete() ;
                    $data['form_union_status'] = 0;
                    M('User')->where('id='.$sid)->save($data)? $this->success('更新成功！'): $this->error('更新失败！');
                }else{
                    $this->delete($Model, $map, array('success'=>'删除成功','error'=>'删除失败'));
                }
                break;
            case 0  :
                $this->forbid($Model, $map, array('success'=>'禁用成功','error'=>'禁用失败'));
                break;
            case 1  :
                $this->resume($Model, $map, array('success'=>'启用成功','error'=>'启用失败'));
                break;
            default :
                $this->error('参数错误');
                break;
        }
    }

}